package com.zt.questionnaire.model.excel.questionnaire;

import com.zt.questionnaire.common.service.HReadExcelFather;
import com.zt.questionnaire.common.utils.NumberUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 疾病测试的问题的选项
 *
 * @author sy
 */
@Slf4j
@Data
public class QuestionnaireOptionExcel {

    /**
     * 选项id
     **/
    private String id;

    /**
     * 选项内容
     **/
    private String content;

    /**
     * 选项内容 1: true
     **/
    private Integer is_other;

    /**
     * 多选时，互斥标记。1、当是多选题时，如果用户选择了带有互斥标记的答案时，就默认去掉其他多选的答案（例如：当一个多选题，用户选择了
     * ‘以上情况都没有’的时候，客户端就把前面选的选项都去掉，后端验证答案不能并存）2、当选了互斥标记的答案时，本题就不列入到病历内容当中
     **/
    private Integer exclusion;

    /**
     * 支线问题集合，多个用中文逗号隔开
     */
    private String question_id_list;

    /**
     * 支线问题集合
     */
    private List<String> questionIdList;

    /**
     * 对应存到数据库的值
     */
    private String filed_value;

    public static Map<String, QuestionnaireOptionExcel> load(String[] titleNames, String[][] values) throws Exception {
        boolean is = true;
        Map<String, QuestionnaireOptionExcel> map = new HashMap<>();
        List<QuestionnaireOptionExcel> list = HReadExcelFather.load(QuestionnaireOptionExcel.class, titleNames, values);
        for (QuestionnaireOptionExcel base : list) {
            String id2 = base.getId();
            if (StringUtils.isBlank(id2)) {
                // 说明整行数据可能为null，可能是最后一行了，后面后空格的东西，即使不是最后一行，如果id=0，也丢的这条数据
                continue;
            }
            QuestionnaireOptionExcel e = map.get(id2);
            if (e != null) {
                is = false;
                log.error("questionnaire表中option表中id重复，id={}", id2);
                continue;
            }

            String question_id_list1 = base.getQuestion_id_list();
            if (StringUtils.isNotBlank(question_id_list1)) {
                // 处理选项id，例如：101-107,1c1,108-117,1c2,118-126， 101-107 中间的数据也需要
                List<String> questionIdList = NumberUtils.splitStringList(question_id_list1, ",");
                base.setQuestion_id_list(null);
                base.setQuestionIdList(questionIdList);
            }

            map.put(id2, base);
        }
        if (!is) {
            throw new Exception("excel表格读取错误");
        }
        return map;
    }

}
